
	sub BG_Standard{	//Wwi

	/*wiGtFNgזȂRg(//)ΊȗB
							*/
		//	return;

		let bgimg=GetCurrentScriptDirectory ~"..\img\back1.png";
		LoadGraphic(bgimg);
		let x=0;
		let y=0;
		let dir=0;
		loop(12){
			BG_WaveEffect(x,y,dir,90,-45,20,3,40,40*(2^0.5),12,10,-1,0,bgimg);
			y+=40;
			dir+=20;
		}

		let ax=[400,100,200,300,250,50,150];
		let ay=[180,120,240,360,60,300,420];
		let adir=[0,60,120,180,240,300,0];
		let arot=[3,-3,2,-2,2.5,-2.5,2.5];
		let aradius=[20,30,20,30,20,30,20];
		let adirshift=[15,15,10,-10,-5,5,-10];
		let bgobj=GetCurrentScriptDirectory ~"..\img\back2.png";
		LoadGraphic(bgobj);
		BG_ColorChangeObject(ax,ay,adir,arot,aradius,adirshift,bgobj,0,0,127,127);
	}

	task BG_ColorChangeObject(	//wipFω`IuWFRzuBSIuWFF^CvB
		x,		//ݒuWBzŁB
		y,
		dir,		//_̏pxB
		rot,		//_̉]xB
		radius,		//_̉]aB
		dirshift,	//_̌XΗʁB܂ŔzB
		grf,		//摜t@C
		gsx,		//摜ǂݍݔ͈
		gsy,
		gex,
		gey
	){
		let r=255;
		let g=255;
		let b=255;
		let radd=0;
		let gadd=0;
		let badd=0;

		let obj=[];
		ascent(i in 0..length(x)){
			obj=obj~[Obj_Create(OBJ_EFFECT)];
			ObjEffect_SetTexture(obj[i],grf);
			ObjEffect_SetLayer(obj[i],1);
			ObjEffect_SetPrimitiveType(obj[i],PRIMITIVE_TRIANGLEFAN);
			ObjEffect_CreateVertex(obj[i],4);
			ObjEffect_SetVertexUV(obj[i],0,gsx,gsy);
			ObjEffect_SetVertexUV(obj[i],1,gex,gsy);
			ObjEffect_SetVertexUV(obj[i],3,gsx,gey);
			ObjEffect_SetVertexUV(obj[i],2,gex,gey);
		}
		let ptn=0;
		while(true){
			//΁ԁ΁
			if(ptn==0){//
				radd=-3;
				gadd=-3;
				badd=0;
			}
			if(ptn==1){//
				radd=3;
				gadd=3;
				badd=-3;
			}
			if(ptn==2){//
				radd=0;
				gadd=-3;
				badd=3;
			}
			if(ptn==3){//
				radd=-3;
				gadd=3;
				badd=0;
			}
			if(ptn==4){//΁
				radd=3;
				gadd=-3;
				badd=-3;
			}
			if(ptn==5){//ԁ
				radd=-3;
				gadd=0;
				badd=0;
			}
			if(ptn==6){//
				radd=0;
				gadd=3;
				badd=0;
			}
			if(ptn==7){//΁
				radd=3;
				gadd=0;
				badd=3;
			}

			loop(84){
				ascent(i in 0..length(x)){
					ObjEffect_SetVertexColor(obj[i],0,180,r,g,b);
					ObjEffect_SetVertexColor(obj[i],1,180,r,g,b);
					ObjEffect_SetVertexColor(obj[i],3,180,r,g,b);
					ObjEffect_SetVertexColor(obj[i],2,180,r,g,b);
					ObjEffect_SetVertexXY(obj[i],0,cos(dir[i])*radius[i]+x[i]-((gex-gsx)/2),sin(dir[i])*radius[i]+y[i]-((gey-gsy)/2));
					ObjEffect_SetVertexXY(obj[i],1,cos(dirshift[i]+dir[i])*radius[i]+x[i]+((gex-gsx)/2),sin(dirshift[i]+dir[i])*radius[i]+y[i]-((gey-gsy)/2));
					ObjEffect_SetVertexXY(obj[i],3,cos(dirshift[i]*3+dir[i])*radius[i]+x[i]-((gex-gsx)/2),sin(dirshift[i]*3+dir[i])*radius[i]+y[i]+((gey-gsy)/2));
					ObjEffect_SetVertexXY(obj[i],2,cos(dirshift[i]*2+dir[i])*radius[i]+x[i]+((gex-gsx)/2),sin(dirshift[i]*2+dir[i])*radius[i]+y[i]+((gey-gsy)/2));
				}
				yield;
				r+=radd;
				g+=gadd;
				b+=badd;
				ascent(i in 0..length(x)){
					dir[i]=dir[i]+rot[i];
				}
			}
			ptn++;
			if(ptn==8){ptn=0;}
		}
	}

	task BG_WaveEffect(	//˂wiBstartdirȂ炢ׂ邪gB
		startx,		//JnW
		starty,
		startdir,	//g̊Jnpx
		progressdira,	//ispx
		progressdirb,
		dirshift,	//_Ƃ̊pxω
		rot,		//]x
		sizea,		//̒_܂ł̈ړ
		sizeb,
		ammo,		//_̐̔
		radius,		//]a
		scrollx,	//wiXN[
		scrolly,
		grf
	){

		let obj=Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj,grf);
		ObjEffect_SetLayer(obj,0);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
		ObjEffect_CreateVertex(obj,ammo*2);
		let v=0;
		let x=startx;
		let y=starty;
		loop(ammo){
			ObjEffect_SetVertexUV(obj,v,x,y);
			x+=cos(progressdira)*sizea;
			y+=sin(progressdira)*sizea;
			v++;
			ObjEffect_SetVertexUV(obj,v,x,y);
			x+=cos(progressdirb)*sizeb;
			y+=sin(progressdirb)*sizeb;
			v++;
		}
		let sx=0;
		let sy=0;
		while(true){
			v=0;
			x=startx;
			y=starty;
			let dir=startdir;
			loop(ammo){
				ObjEffect_SetVertexXY(obj,v,cos(dir)*radius+x,sin(dir)*radius+y);
				ObjEffect_SetVertexUV(obj,v,x+sx,y+sy);
				ObjEffect_SetVertexColor(obj,v,255,127,127,127);
				x+=cos(progressdira)*sizea;
				y+=sin(progressdira)*sizea;
				v++;
				dir+=dirshift;
				ObjEffect_SetVertexXY(obj,v,cos(dir)*radius+x,sin(dir)*radius+y);
				ObjEffect_SetVertexUV(obj,v,x+sx,y+sy);
				ObjEffect_SetVertexColor(obj,v,255,127,127,127);
				x+=cos(progressdirb)*sizeb;
				y+=sin(progressdirb)*sizeb;
				v++;
				dir+=dirshift;
			}
			startdir+=rot;
			sy-=scrolly;
			sx-=scrollx;
			yield;
		}
	}


let bgx=0;

	sub BG_Simple{		//wiȈՔ
		let bgimg=GetCurrentScriptDirectory ~"..\img\back1.png";
		LoadGraphic(bgimg);
		SetTexture(bgimg);
		SetAlpha(255);
		SetColor(127,127,127);
		SetGraphicRect(0,0,512,512);
		DrawGraphic(GetCenterX+bgx+512,GetCenterY);
		DrawGraphic(GetCenterX+bgx,GetCenterY);
		bgx-=1;
		if(bgx<-512){bgx+=512;}
		SetColor(255,255,255);
	}

let laserring=[];

	task BombBarrier{	//{oA[o
		laserring=[];	//ĂяoƂɔzĂ
		let dirx=0;
		let diry=45;
		let dirz=60;
		let distance=100;
		let expand=3;
		let laserwidth=8;
		let vertex=7;
		let rotx=2.2;
		let roty=1.0;
		let rotz=0.3;
		let separate=vertex;
		let delay=20;
		let color=[WHITE01,PURPLE01,RED01,BLUE01,GREEN01,YELLOW01,ORANGE01];
		wait(1);	//̊֌WAvC[XNvgɂĂ͖GԂ肭EȂ̂̂1t[҂Ă݂B
		ascent(i in 0..length(color)){
			loop(vertex){
				LaserRing(dirx,diry+(180/length(color)*i),dirz+(360/length(color)*i),rotx,roty,rotz,distance,expand,laserwidth,GetTimeOfPlayerInvincibility,separate,vertex,color[i],delay);
				dirx+=360/vertex;
			}
			separate+=vertex;

		}
	}

	task LaserRing(		//{̎͂O]Ă邩̂悤Ɍ郌[U[
		dirx,		//pxXBłPȐ^~̒_ړB
		diry,		//pxYB̐Lkɂ[]B
		dirz,		//pxZBʉ]B
		rotx,		//]xX
		roty,		//]xY
		rotz,		//]xZ
		distancemax,	//{̂̋(ő)
		expand,		//WJx
		laserwidth,	//[U[
		killtime,	//IԁBȂXyI܂ŁB
		separate,	//zulaserring[]vʒuBgpvZɓĐmɓ͂邱ƁBԈႤƃG[B
		vertex,		//_̐
		grf,		//OtBbN
		delay		//fBC
	){
		//e^XN
		let obj = Obj_Create(OBJ_LASER);//eIuWFNg쐬
		Obj_SetPosition(obj,GetX,GetY);
		Obj_SetAlpha(obj,0);
		ObjLaser_SetSource(obj,false);//O(D݂ŕtĂǂ)
		laserring=laserring~[obj];	//zɐςݍ
		let targetid=length(laserring);	//ڕWIDAzvfԍŉo^
		if(targetid==separate){targetid-=vertex;}//I_Ǝn_q
		wait(1);//S_̍쐬҂
		targetid=laserring[targetid];	//o^

		Obj_SetAlpha(obj,255);
		Obj_SetSpeed(obj, 0);
		Obj_SetAngle(obj, 0);
		ObjShot_SetGraphic(obj, grf);
		ObjShot_SetDelay(obj, delay);
		Obj_SetAutoDelete(obj,false);
		ObjShot_SetBombResist(obj,true);
		ObjLaser_SetWidth(obj,laserwidth);
		ObjLaser_SetLength(obj,0);

		let width=0;
		let distance=0;

		while(!Obj_BeDeleted(obj)){
			let x=cos(dirx)*width*distance;
			let y=sin(dirx)*distance;

			Obj_SetPosition(obj,cos(dirz)*x-sin(dirz)*y+GetX,sin(dirz)*x+cos(dirz)*y+GetY);
			dirx+=rotx;

			dirz+=rotz;
			width=sin(diry);
			diry+=roty;

			Obj_SetAngle(obj, atan2(Obj_GetY(targetid)-Obj_GetY(obj),Obj_GetX(targetid)-Obj_GetX(obj)));//pxݒ
			ObjLaser_SetLength(obj,Distance(Obj_GetX(obj),Obj_GetY(obj),Obj_GetX(targetid),Obj_GetY(targetid)));

			killtime--;
			if(killtime==0){Obj_Delete(obj);}
			if(distance<distancemax){
				distance+=expand;
				if(distance>distancemax){distance=distancemax;}
			}

			yield;
		}
	}

	function wait(n){
		loop(n){yield;}
	}
	function DistanceToPlayer(x,y){
			return(((x-GetPlayerX)^2+(y-GetPlayerY)^2)^0.5);
	}
	function Distance(xa,ya,xb,yb){
			return(((xa-xb)^2+(ya-yb)^2)^0.5);
	}
	function limit(val,min,max){	//lw͈͂Ɏ߂֐
		if(val<min){return(min);}
		if(val>max){return(max);}
		return(val);
	}
